package com.zhiwei.jenkins.utils;

import com.zhiwei.jenkins.common.basics.BaseErrorResponse;
import com.zhiwei.jenkins.common.basics.BaseSuccessResponse;
import com.zhiwei.jenkins.common.basics.ParamErrorDetail;
import com.zhiwei.jenkins.common.enums.ResponseCode;
import org.apache.tomcat.util.http.ResponseUtil;

import java.util.List;

/**
 * @Description: java类作用描述
 * @Author: wyjun
 * @UpdateDate: 2019/11/14 10:06
 * @Version: 1.0
 */
public class ResponseUtils {

    /**
     * 成功的响应
     * @return 成功的响应格式
     */
    public static BaseSuccessResponse getSuccessResponse() {
        return new BaseSuccessResponse();
    }
    /**
     * 成功的响应
     * @param data 响应的数据
     * @return 成功的响应格式
     */
    public static BaseSuccessResponse getSuccessResponse(Object data) {
        return new BaseSuccessResponse(data);
    }

    /**
     * 成功的响应
     * @param data 响应的数据
     * @return 成功的响应格式
     */
    public static BaseSuccessResponse getSuccessResponse(String msg) {
        return new BaseSuccessResponse(msg);
    }

    /**
     * 成功的响应
     * @param data 响应的数据
     * @return 成功的响应格式
     */
    public static BaseSuccessResponse getSuccessResponse(Object data, String msg) {
        return new BaseSuccessResponse(data,msg);
    }



    /**
     * 错误的响应，默认500
     * @return 错误的响应格式
     */
    public static BaseErrorResponse getErrorResponse() {
        return new BaseErrorResponse();
    }

    /**
     * 错误的响应，默认500
     * @param errorMsg 错误消息
     * @return
     */
    public static BaseErrorResponse getErrorResponse(String errorMsg) {
        return new BaseErrorResponse(errorMsg);
    }

    /**
     * 错误的响应，说明错误原因
     * @param code 响应码
     * @param errorCode 错误码
     * @param msg 错误消息
     * @return 错误的响应格式
     */
    public static BaseErrorResponse getErrorResponse(int code, String errorCode, String msg) {
        return new BaseErrorResponse(code, errorCode, msg);
    }

    /**
     * 错误的响应，请求参数错误，包含错误参数的详情
     * @param code 响应码
     * @param errorCode 错误码
     * @param msg 错误消息
     * @param errorDetail 参数错误详情(多个参数错误){@link ParamErrorDetail}
     * @return 错误的响应格式
     */
    public static BaseErrorResponse getErrorResponse(List<ParamErrorDetail> paramErrorDetails) {
        return new BaseErrorResponse(paramErrorDetails);
    }
    /**
     * 错误的响应，请求参数错误，包含错误参数的详情
     * @param code 响应码
     * @param errorCode 错误码
     * @param msg 错误消息
     * @param errorDetail 参数错误详情{@link ParamErrorDetail}
     * @return 错误的响应格式
     */
    public static BaseErrorResponse getErrorResponse(ParamErrorDetail paramErrorDetail) {
        return new BaseErrorResponse(paramErrorDetail);
    }

    /**
     * 依据service返回的错误码组装错误的响应信息
     * @param serviceCode 调用服务执行失败的错误码
     * @return 错误的响应格式
     */
   /* public static BaseErrorResponse getErrorResponse(Integer serviceCode) {
        ResponseCode responseCode = ResponseCode.getResponseCodeByServiceCode(serviceCode);

        return ResponseUtil.getErrorResponse(responseCode.getHttpCode(), responseCode.getErrorCode(),
                responseCode.getMsg());
    }
*/
    /**
     * 依据service返回的结果组装错误的响应信息
     * @param serviceResponse 调用服务后的执行结果
     * @return 错误的响应格式
     */
   /* public static BaseErrorResponse getErrorResponse(ServiceResponse<?> serviceResponse) {

        ResponseCode responseCode = ResponseCode.getResponseCodeByServiceCode(serviceResponse.getCode());

        String msg = responseCode.getMsg();

        if(ResponseCode.REQUESTERROR == responseCode) {
            msg = serviceResponse.getMsg();
        }
        return ResponseUtil.getErrorResponse(responseCode.getHttpCode(), responseCode.getErrorCode(),
                msg);
    }*/

}
